#include "IOReader.h"
#include <Arduino.h>
#include "DataStorageIO.h"
IOReader::IOReader(IOPort& ioport):
_ioport(ioport),_last_millis(0)
{
    _last_millis = millis(); 
}

IOReader::~IOReader()
{

}

void IOReader::schedule()
{
    if( (millis()-_last_millis) < 200){
        return;
    }

    module_general_reg_t& general_reg = DataStorageIO::module_reg().module_general_reg;
    //A0-输入
    if(general_reg.io_direction_reg.a0 == 0){
        //0:数字,1:模拟
        if(general_reg.io_type_reg.a0 == 1){
             general_reg.ain_reg.A0.value = _ioport.ain0().read_u16();
        }else{
            general_reg.aio_level_reg.a0 = _ioport.aio0().read();
        }
    }
    //A1-输入
    if(general_reg.io_direction_reg.a1 == 0){
        //0:数字,1:模拟
        if(general_reg.io_type_reg.a1 == 1){
             general_reg.ain_reg.A1.value = _ioport.ain1().read_u16();
        }else{
            general_reg.aio_level_reg.a1 = _ioport.aio1().read();
        }
    }
    //A2-输入
    if(general_reg.io_direction_reg.a2 == 0){
       //0:数字,1:模拟
        if(general_reg.io_type_reg.a2 == 1){
             general_reg.ain_reg.A2.value = _ioport.ain2().read_u16();
        }else{
            general_reg.aio_level_reg.a2 = _ioport.aio2().read();
        }
    }
    //A3-输入
    if(general_reg.io_direction_reg.a3 == 0){
        //0:数字,1:模拟
        if(general_reg.io_type_reg.a3 == 1){
             general_reg.ain_reg.A3.value = _ioport.ain3().read_u16();
        }else{
            general_reg.aio_level_reg.a3 = _ioport.aio3().read();
        }
    }

    //D0-输入
    if(general_reg.io_direction_reg.d0 == 0){
        //只有数字IO
        general_reg.dio_level_reg.d0 = _ioport.dio0().read();
    }
    //D1-输入
    if(general_reg.io_direction_reg.d1 == 0){
        general_reg.dio_level_reg.d1 = _ioport.dio1().read();
    }
    //D2-输入
    if(general_reg.io_direction_reg.d2 == 0){
        general_reg.dio_level_reg.d2 = _ioport.dio2().read();
    }
    //D3-输入
    if(general_reg.io_direction_reg.d3 == 0){
        general_reg.dio_level_reg.d3 = _ioport.dio3().read();
    }

    _last_millis  = millis();

}

void IOReader::update()
{

}
void IOReader::dispatch(uint8_t* data,size_t size)
{

}
void IOReader::cleanup()
{
    
}
